package com.zzs.rent.common.model.enums;

import lombok.Getter;

/**
 * 响应状态码枚举
 * 参考 HTTP 状态码设计，消息使用中文
 * 
 * @author zzs
 */
@Getter
public enum ResultCode {
    
    // ========== 成功状态码 2xx ==========
    /**
     * 请求成功
     */
    SUCCESS(200, "操作成功"),
    
    /**
     * 已创建
     */
    CREATED(201, "创建成功"),
    
    /**
     * 已接受
     */
    ACCEPTED(202, "请求已接受"),
    
    /**
     * 无内容
     */
    NO_CONTENT(204, "无返回内容"),
    
    // ========== 客户端错误状态码 4xx ==========
    /**
     * 请求参数错误
     */
    BAD_REQUEST(400, "请求参数错误"),
    
    /**
     * 未授权
     */
    UNAUTHORIZED(401, "未授权，请先登录"),
    
    /**
     * 支付要求
     */
    PAYMENT_REQUIRED(402, "需要付费"),
    
    /**
     * 禁止访问
     */
    FORBIDDEN(403, "禁止访问，权限不足"),
    
    /**
     * 资源未找到
     */
    NOT_FOUND(404, "请求的资源不存在"),
    
    /**
     * 请求方法不允许
     */
    METHOD_NOT_ALLOWED(405, "请求方法不允许"),
    
    /**
     * 请求超时
     */
    REQUEST_TIMEOUT(408, "请求超时"),
    
    /**
     * 冲突
     */
    CONFLICT(409, "数据冲突，请刷新后重试"),
    
    /**
     * 资源已被删除
     */
    GONE(410, "请求的资源已被删除"),
    
    /**
     * 请求实体过大
     */
    PAYLOAD_TOO_LARGE(413, "请求数据过大"),
    
    /**
     * URI过长
     */
    URI_TOO_LONG(414, "请求URI过长"),
    
    /**
     * 不支持的媒体类型
     */
    UNSUPPORTED_MEDIA_TYPE(415, "不支持的媒体类型"),
    
    /**
     * 请求范围不符合要求
     */
    REQUESTED_RANGE_NOT_SATISFIABLE(416, "请求范围不符合要求"),
    
    /**
     * 请求过于频繁
     */
    TOO_MANY_REQUESTS(429, "请求过于频繁，请稍后再试"),
    
    // ========== 服务端错误状态码 5xx ==========
    /**
     * 服务器内部错误
     */
    INTERNAL_SERVER_ERROR(500, "服务器内部错误"),
    
    /**
     * 功能未实现
     */
    NOT_IMPLEMENTED(501, "功能未实现"),
    
    /**
     * 网关错误
     */
    BAD_GATEWAY(502, "网关错误"),
    
    /**
     * 服务不可用
     */
    SERVICE_UNAVAILABLE(503, "服务暂时不可用，请稍后重试"),
    
    /**
     * 网关超时
     */
    GATEWAY_TIMEOUT(504, "网关超时"),
    
    // ========== 自定义业务状态码 1xxx ==========
    /**
     * 用户不存在
     */
    USER_NOT_EXIST(1001, "用户不存在"),
    
    /**
     * 用户已存在
     */
    USER_ALREADY_EXIST(1002, "用户已存在"),
    
    /**
     * 用户名或密码错误
     */
    USERNAME_OR_PASSWORD_ERROR(1003, "用户名或密码错误"),
    
    /**
     * 账号已被禁用
     */
    USER_DISABLED(1004, "账号已被禁用"),
    
    /**
     * 账号已被锁定
     */
    USER_LOCKED(1005, "账号已被锁定"),
    
    /**
     * Token过期
     */
    TOKEN_EXPIRED(1006, "登录已过期，请重新登录"),
    
    /**
     * Token无效
     */
    TOKEN_INVALID(1007, "无效的Token"),
    
    /**
     * 验证码错误
     */
    CAPTCHA_ERROR(1008, "验证码错误"),
    
    /**
     * 验证码已过期
     */
    CAPTCHA_EXPIRED(1009, "验证码已过期"),
    
    /**
     * 数据验证失败
     */
    VALIDATION_FAILED(1010, "数据验证失败"),
    
    /**
     * 文件上传失败
     */
    FILE_UPLOAD_FAILED(1011, "文件上传失败"),
    
    /**
     * 文件类型不支持
     */
    FILE_TYPE_NOT_SUPPORT(1012, "不支持的文件类型"),
    
    /**
     * 文件大小超限
     */
    FILE_SIZE_EXCEEDED(1013, "文件大小超出限制"),
    
    /**
     * 数据已存在
     */
    DATA_ALREADY_EXIST(1014, "数据已存在"),
    
    /**
     * 数据不存在
     */
    DATA_NOT_EXIST(1015, "数据不存在"),
    
    /**
     * 数据正在使用中
     */
    DATA_IN_USE(1016, "数据正在使用中，无法删除"),
    
    /**
     * 参数缺失
     */
    PARAM_MISSING(1017, "缺少必要参数"),
    
    /**
     * 参数类型错误
     */
    PARAM_TYPE_ERROR(1018, "参数类型错误"),
    
    /**
     * 业务异常
     */
    BUSINESS_ERROR(1019, "业务处理异常"),
    
    /**
     * 系统繁忙
     */
    SYSTEM_BUSY(1020, "系统繁忙，请稍后再试"),
    
    /**
     * 操作失败
     */
    OPERATION_FAILED(1021, "操作失败"),
    
    /**
     * 限流降级
     */
    FLOW_LIMITING(1022, "系统限流，请稍后再试"),
    
    /**
     * 服务降级
     */
    SERVICE_DEGRADATION(1023, "服务降级，请稍后再试"),
    
    /**
     * RPC调用失败
     */
    RPC_ERROR(1024, "远程服务调用失败");
    
    /**
     * 状态码
     */
    private final Integer code;
    
    /**
     * 消息
     */
    private final String message;
    
    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
}

